[JS/백준]{그리디}(21314) 민겸 수

202210월 03

백준 문제 링크

1

문제 설명

가장 큰수를 만드는 방법은 K가 맨마지막에 오는 문자열들을 다 더해주었을때 가장 큰수가 된다

ex) MK, K, MMK

반대로 가장 작은수를 만드는 방법은 K가 들어왔을때 5를 더해주고 M이 들어왔을떄는 최대한 M을 더 길게 이어준다

ex) M, K, K, MM, K


코드

function findMax(inputData) {
  let tmp = [];
  let maxNum = "";

  inputData.forEach((val) => {
    if (val === "M") {
      tmp.push(val);
    } else {
      if (!tmp.length) {
        maxNum += "5";
      } else {
        if (tmp.at(-1) === "M") {
          let a = "5";
          a = a.padEnd(tmp.length + 1, "0");
          maxNum += a;
          tmp = [];
        }
      }
    }
  });

  if (tmp.length) {
    tmp.forEach((val) => {
      if (val === "M") {
        maxNum += "1";
      } else {
        maxNum += "5";
      }
    });
  }

  return maxNum;
}

function findMin(inputData) {
  let tmp2 = [];
  let minNum = "";

  inputData.forEach((val) => {
    if (val === "K") {
      if (tmp2.length) {
        let a = "1";
        a = a.padEnd(tmp2.length, "0");
        minNum += a;
        tmp2 = [];
      }
      minNum += "5";
    } else {
      tmp2.push(val);
    }
  });

  if (tmp2.length) {
    if (tmp2[0] === "M") {
      let a = "1";
      a = a.padEnd(tmp2.length, "0");
      minNum += a;
    } else {
      minNum += "5";
    }
  }
  return minNum;
}

const line = require("fs").readFileSync("./input.txt", "utf8");
let inputData = line.trim().split("");

const maxNum = findMax(inputData);
const minNum = findMin(inputData);

console.log(maxNum);
console.log(minNum);